import UIKit
/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=41

    第41课
        1. 自动引用计数ARC工作机制
        2. 强引用
        3. 反初始化器 deinit
 */

class Test {
    var name: String
    init(name: String) {
        self.name = name
    }
    
    deinit { // 反初始化器
        print("内存释放了，被销毁了", self.name)
    }

}

// 3个变量 指向同一个地址
var t1: Test? = Test(name: "hello") // 引用 1 - 也是强引用
var t2 = t1 // 引用 2 - 也是强引用
var t3 = t1 // 引用 3 - 也是强引用

t3?.name = "doggg"
print("t1.name", t1?.name ?? "t1 unknow")
print("t2.name", t2?.name ?? "t2 unknow")

// 释放内存 - t1, t2, t3 无顺序释放 --- Test 没有指向，就被销毁了
t1 = nil // 引用 2
print("nil ___ t2.name", t2?.name ?? "t2 unknow") // 因为Test没有被销毁，内存还在，可以调用
t2 = nil // 引用 1
t3 = nil // 引用 0







// 仅有一个引用
var t: Test? = Test(name: "swift")
t = nil


